package br.org.acessobrasil.portal.action;


import java.util.List;

import org.apache.log4j.Logger;

import br.org.acessobrasil.facade.FacadeException;
import br.org.acessobrasil.portal.facade.ErroAcessibilidadeException;
import br.org.acessobrasil.portal.facade.PadraoApresentacaoFacade;
import br.org.acessobrasil.portal.modelo.PadraoApresentacao;
import br.org.acessobrasil.portal.modelo.Usuario;
/**
 * 
 * @author Fabio Issamu Oshiro
 *
 */
public class PadraoApresentacaoAction extends Super{
	private static Logger logger = Logger.getLogger(PadraoApresentacaoAction.class);
	private static final long serialVersionUID = 1293801945334863313L;

	private List<PadraoApresentacao> listPadraoApresentacao;
	private PadraoApresentacao padraoApresentacao;
	private PadraoApresentacaoFacade padraoApresentacaoFacade;
	private String relatorioAcessibilidade;
	
	/**
	 * Caso o usuario queira que o sistema tente acessibilizar o conteudo automaticamente
	 */
	private String btnAcessibilizar=null;
	
	public PadraoApresentacaoAction(PadraoApresentacaoFacade padraoApresentacaoFacade) {
		this.padraoApresentacaoFacade = padraoApresentacaoFacade;
	}
	
	public String getRelatorioAcessibilidade() {
		return relatorioAcessibilidade;
	}
	
	public void setRelatorioAcessibilidade(String relatorioAcessibilidade) {
		this.relatorioAcessibilidade = relatorioAcessibilidade;
	}
	
	public PadraoApresentacao getPadraoApresentacao() {
		return padraoApresentacao;
	}
	
	public void setPadraoApresentacao(PadraoApresentacao padraoApresentacao) {
		this.padraoApresentacao = padraoApresentacao;
	}
	
	
	
	public String verAjudaPadraoApresentacao(){
		return SUCCESS;
	}

	public String criarPadraoApresentacao(){
		Usuario usuario = getUsuarioLogado();
		try{		
			if(padraoApresentacao != null){
				padraoApresentacao.setSitio(getSitioAtual());
				padraoApresentacaoFacade.criar(getUsuarioLogado(), padraoApresentacao,btnAcessibilizar!=null);
				usuario.addActionMessage("Template \""+padraoApresentacao.getNoPadrao()+"\" adicionado com sucesso.");
			}else{
				padraoApresentacao = criarPadraoPredefinido();
				return INPUT;
			}
		}catch(ErroAcessibilidadeException e){
			relatorioAcessibilidade = e.getDetalhes();
			usuario.addActionError("Template \""+padraoApresentacao.getNoPadrao()+"\" avaliado com erro.");
		} catch (FacadeException e) {
			logger.error("Erro ao criar padrao de apresentacao" + e);
			usuario.addActionError("Erro: " + e.getMessage());
		}
		return  SUCCESS;		
	}
	
	private PadraoApresentacao criarPadraoPredefinido(){
		PadraoApresentacao template = new PadraoApresentacao();	
		template.setNoPadrao(getText("label.digite.nome"));
		template.setDePadraoApresentacao(getText("predefinido.temp"));
		template.setDePadraoTemp(getText("predefinido.descricao"));
		template.setStSituacao('r');
		return template;
	}
	
	public String listar() {
		Usuario usuario = getUsuarioLogado();
		try{
			listPadraoApresentacao = padraoApresentacaoFacade.listar(getSitioAtual());
		}catch(Exception e){
			listPadraoApresentacao = null;
			usuario.addActionError("Voc&ecirc; n&atilde;o tem um s&iacute;tio definido na sess&atilde;o.");
		}
		return SUCCESS;
	}
	
	/**
	 * Carrega do banco o padrao de apresentacao
	 * @return SUCCESS
	 */
	public String carregarPadraoApresentacao() {
		Usuario usuario = getUsuarioLogado();
		try{
			padraoApresentacao = padraoApresentacaoFacade.buscar(usuario, padraoApresentacao.getNuPadraoApresentacao());
			relatorioAcessibilidade = padraoApresentacaoFacade.validarAcessibilidade(usuario, padraoApresentacao);
		}catch (FacadeException e) {
			logger.error("Erro ao carregar o padr&atilde;o de apresenta&ccedil;&atilde;o.",e);
			usuario.addActionError("Erro ao carregar o template.");
		}catch(Exception e){
			logger.error("Erro ao carregar o padr&atilde;oo de apresenta&ccedil;&atilde;o.",e);
			usuario.addActionError("Erro: " + e.getMessage());
		}
		return SUCCESS;
	}
	
	/**
	 * Abre a tela para confirmar<br>
	 * Apaga<br>
	 * ou<br>
	 * Cancela<br>
	 * @return SUCCESS volta para a lista
	 * INPUT pagina de confirmacao
	 */
	public String apagarPadraoApresentacao(){
		try{
			carregarPadraoApresentacao();
			if(getBtnApagar()!=null){
				padraoApresentacaoFacade.excluir(getUsuarioLogado(), padraoApresentacao);
				return SUCCESS;		
			}else if(getBtnCancelar()!=null){
				//acao cancelada
				return SUCCESS;
			}else{
				//somente abrir
				return INPUT;
			}
		}catch(FacadeException e){
			addActionError("Erro: " + e.getMessage());
		}catch(Exception e){
			addActionError("Erro: " + e.getMessage());
			logger.error("Erro inesperado ao apagar template.",e);
		}
		return INPUT;
	}

	public String atualizarPadraoApresentacao() {
		Usuario usuario = getUsuarioLogado();
		try{
			padraoApresentacaoFacade.atualizar(getUsuarioLogado(), padraoApresentacao,btnAcessibilizar!=null);
			usuario.addActionMessage("Atualizado com sucesso");
		}catch(ErroAcessibilidadeException e){
			relatorioAcessibilidade = e.getDetalhes();
		} catch (FacadeException e) {
			logger.error("Erro inesperado ao atualizar" + e);
			usuario.addActionError("Erro: " + e.getMessage());
		}
		return  SUCCESS;
	}
	

	public List<PadraoApresentacao> getListPadraoApresentacao() {
		return listPadraoApresentacao;
	}

	public void setListPadraoApresentacao(List<PadraoApresentacao> listPadraoApresentacao) {
		this.listPadraoApresentacao = listPadraoApresentacao;
	}
	public String getBtnAcessibilizar() {
		return btnAcessibilizar;
	}
	public void setBtnAcessibilizar(String btnAcessibilizar) {
		this.btnAcessibilizar = btnAcessibilizar;
	}
	
}
